package cn.kgc.service;

import io.seata.rm.tcc.api.BusinessActionContext;
import io.seata.rm.tcc.api.BusinessActionContextParameter;
import io.seata.rm.tcc.api.LocalTCC;
import io.seata.rm.tcc.api.TwoPhaseBusinessAction;

/**
 * @author wangyue
 * @version 1.0
 */
@LocalTCC
public interface ResumeTccService {
    @TwoPhaseBusinessAction(
            //给try操作起了个名字,名字全局唯一即可。
            name="tryInitResume",
            //如果全局事务中所有的分支事务的try操作都执行成功,则执行commitMethod中指定的方法。
            commitMethod="commitInitResume",
            //如果全局事务中任何一个分支事务的try操作执行失败,则执行rollbackMethod中指定的方法。
            rollbackMethod = "rollbackInitResume"
    )
    boolean tryInitResume(
            //如果方法中需要使用BusinessActionContext参数,此参数就应该是方法的第一个参数
            BusinessActionContext actionContext,
            //业务参数,可能需要在commit方法中和rollback方法中使用,就可以在参数前使用注解
            //@BusinessActionContextParameter
            @BusinessActionContextParameter(paramName = "userId") String userId
    );

    boolean commitInitResume(BusinessActionContext actionContext);

    boolean rollbackInitResume(BusinessActionContext actionContext);
}